home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / basic / basfrm13.zip / PC-MAZE.NEW < prev    next >
Text File  |  1992-07-04  |  8KB  |  373 lines

  1. ' This file was converted by the DavisWARE Basic Formatter Version 1.2
  2. ' (C) Copyright 1992 - James R. Davis - All Rights Reserved
  3. ' [The UNREGISTERED Software Version!]
  4.  
  5. ' PC-MAZE - MODIFIED FOR EASIER USE ON THE IBM-PC
  6. ' BY JAMES R. DAVIS
  7. KEY OFF
  8. Lab40:
  9.   CLEAR, , 20000
  10.   SCREEN 0
  11.   WIDTH 40
  12.   CLS
  13.   GOTO Lab450
  14. Lab70:
  15.   N% = 2
  16.   A% = H%
  17.   B% = V%
  18.   Ff% = 2 ^ (F% - 1)
  19.   SCREEN 1
  20.   COLOR 0, 1
  21.   CLS
  22. Lab90:
  23.   Z% = M%(A%, B%) * Ff%
  24.   IF FN M%(Z% / 16) = 0 THEN Lab130
  25.   Rl% = -1
  26.   GOSUB Lab390
  27.   GOTO Lab160
  28. Lab130:
  29.   W% = M%(A% + S%, B% - R%) * Ff%
  30.   IF FN M%(W% / 128) = 0 THEN Lab160
  31.   Rl% = -1
  32.   GOSUB Lab340
  33. Lab160:
  34.   IF FN M%(Z% / 64) = 0 THEN Lab190
  35.   Rl% = 1
  36.   GOSUB Lab390
  37.   GOTO Lab220
  38. Lab190:
  39.   W% = M%(A% - S%, B% + R%) * Ff%
  40.   IF FN M%(W% / 128) = 0 THEN Lab220
  41.   Rl% = 1
  42.   GOSUB Lab340
  43. Lab220:
  44.   IF FN M%(Z% / 128) = 1 THEN Lab260
  45.   N% = N% + 1
  46.   IF N% > 8 THEN Lab270
  47.   A% = A% + R%
  48.   B% = B% + S%
  49.   IF B% < 2 THEN Lab270
  50.   GOTO Lab90
  51. Lab260:
  52.   GOSUB Lab280
  53. Lab270:
  54.   RETURN
  55. Lab280:
  56.   PSET (Vx% + Dx%(N%), Yu%(N%)), 2
  57.   LINE (Vx% + Dx%(N%), Yu%(N%)) - (Vx% + Dx%(N%), Yd%(N%)), 2
  58.   LINE (Vx% + Dx%(N%), Yd%(N%)) - (Vx% - Dx%(N%), Yd%(N%)), 2
  59.   LINE (Vx% - Dx%(N%), Yd%(N%)) - (Vx% - Dx%(N%), Yu%(N%)), 2
  60.   LINE (Vx% - Dx%(N%), Yu%(N%)) - (Vx% + Dx%(N%), Yu%(N%)), 2
  61.   RETURN
  62. Lab340:
  63.   PSET (Vx% + Rl% * Dx%(N% - 1), Yu%(N%)), 2
  64.   LINE (Vx% + Rl% * Dx%(N% - 1), Yu%(N%)) - (Vx% + Rl% * Dx%(N%), Yu%(N%)), 2
  65.   LINE (Vx% + Rl% * Dx%(N%), Yu%(N%)) - (Vx% + Rl% * Dx%(N%), Yd%(N%)), 2
  66.   LINE (Vx% + Rl% * Dx%(N%), Yd%(N%)) - (Vx% + Rl% * Dx%(N% - 1), Yd%(N%)), 2
  67.   RETURN
  68. Lab390:
  69.   PSET(Vx% + Rl% * Dx%(N% - 1), Yu%(N% - 1)), 2
  70.   LINE (Vx% + Rl% * Dx%(N% - 1), Yu%(N% - 1)) - (Vx% + Rl% * Dx%(N%), Yu%(N%)), 2
  71.   LINE (Vx% + Rl% * Dx%(N%), Yu%(N%)) - (Vx% + Rl% * Dx%(N%), Yd%(N%)), 2
  72.   LINE (Vx% + Rl% * Dx%(N%), Yd%(N%)) - (Vx% + Rl% * Dx%(N% - 1), Yd%(N% - 1)), 2
  73.   IF N% > 2 THEN LINE (Vx% + Rl% * Dx%(N% - 1), Yd%(N% - 1)) - (Vx% + Rl% * Dx%(N% - 1), Yu%(N% - 1)), 2
  74.   RETURN
  75. Lab450:
  76.   CLS
  77.   COLOR 9, 0
  78.   LOCATE 6, 12
  79.   PRINT "YOU ARE THE RAT!"
  80.   PRINT
  81.   LOCATE 4, 4
  82.   PRINT "A DIFFERENT PERSPECTIVE ON MAZES."
  83.   Ch% = 0
  84.   PRINT
  85.   LOCATE 1, 1
  86.   PRINT "FROM THE COMPUSERVE APPLE USER'S GROUP"
  87.   LOCATE 2, 9
  88.   PRINT "PUBLIC ACCESS DATABASE"
  89.   LOCATE 17, 1
  90.   PRINT "----------------------------------------"
  91.   LOCATE 18, 9
  92.   PRINT "USE <- AND -> TO TURN"
  93.   PRINT
  94.   LOCATE 19, 6
  95.   PRINT "<SPACE BAR> TO MOVE FORWARD"
  96.   PRINT
  97.   LOCATE 20, 3
  98.   PRINT "<ESCAPE> FOR A TOP VIEW (TO CHEAT)"
  99.   DEF FN M%(X%) = INT(X%) - INT(INT(X%) / 2) * 2
  100. Lab540:
  101.   LOCATE 15, 1
  102.   Fx% = 36
  103.   INPUT "PLEASE ENTER MAZE SIZE (H,V) "; H%, V%
  104.   H% = INT(H%)
  105.   V% = INT(V%)
  106.   IF H% > 2 AND H% < 51 AND V% > 2 AND V% < 51 THEN Lab580
  107.   PRINT "2<H<51 -- 2<V<51"
  108.   GOTO Lab540
  109. Lab580:
  110.   N% = H% * V% - 1
  111.   H% = H% + 1
  112.   V% = V% + 1
  113.   D% = 1
  114.   DIM M%(52, 52), W%(400)
  115.   FOR J% = 1 TO V% + 1
  116.     M%(1, J%) = 4
  117.     M%(H% + 1, J%) = 1
  118.   NEXT J%
  119.   Mx% = 278
  120.   My% = 190
  121.   Vx% = INT(Mx% / 2)
  122.   Vy% = INT(My% / 2)
  123.   X% = Vx%
  124.   FOR J% = 1 TO 8
  125.     Dx%(J%) = X%
  126.     Yu%(J%) = INT(Vy% - X% * Vy% / Vx%)
  127.     Yd%(J%) = INT(Vy% + X% * (My% - Vy%) / Vx%)
  128.     X% = INT(X% * 7 / 10)
  129.   NEXT J%
  130.   FOR I% = 2 TO H%
  131.     M%(I%, V% + 1) = 8
  132.     M%(I%, 1) = 2
  133.     FOR J% = 2 TO V%
  134.       M%(I%, J%) = 15
  135.   NEXT J%, I%
  136.   R% = INT(H% / 2 + 1)
  137.   S% = INT(V% / 2 + 1)
  138.   M%(R%, S%) = 15
  139.   COLOR 23
  140.   PRINT "            GENERATING MAZE."
  141.   COLOR 9
  142.   FOR Iw% = 1 TO N%
  143. Lab710:
  144.     I% = 0
  145.     IF M%(R% - 1, S%) < 15 THEN Lab740
  146.     I% = I% + 1
  147.     C%(I%) = 1
  148. Lab740:
  149.     IF M%(R%, S% - 1) < 15 THEN Lab760
  150.     I% = I% + 1
  151.     C%(I%) = 2
  152. Lab760:
  153.     IF M%(R% + 1, S%) < 15 THEN Lab780
  154.     I% = I% + 1
  155.     C%(I%) = 3
  156. Lab780:
  157.     IF M%(R%, S% + 1) < 15 THEN Lab800
  158.     I% = I% + 1
  159.     C%(I%) = 4
  160. Lab800:
  161.     IF I% = 0 THEN Lab990
  162.     IF I% <> 1 THEN I% = INT(RND(TIMER) * I%) + 1
  163.     ON C%(I%) GOTO Lab830, Lab870, Lab910, Lab950
  164. Lab830:
  165.     M%(R%, S%) = M%(R%, S%) - FN M%(M%(R%, S%))
  166.     R% = R% - 1
  167.     M%(R%, S%) = M%(R%, S%) - FN M%(M%(R%, S%) / 4) * 4
  168.     GOTO Lab1100
  169. Lab870:
  170.     M%(R%, S%) = M%(R%, S%) - FN M%(M%(R%, S%) / 8) * 8
  171.     S% = S% - 1
  172.     M%(R%, S%) = M%(R%, S%) - FN M%(M%(R%, S%) / 2) * 2
  173.     GOTO Lab1100
  174. Lab910:
  175.     M%(R%, S%) = M%(R%, S%) - FN M%(M%(R%, S%) / 4) * 4
  176.     R% = R% + 1
  177.     M%(R%, S%) = M%(R%, S%) - FN M%(M%(R%, S%))
  178.     GOTO Lab1100
  179. Lab950:
  180.     M%(R%, S%) = M%(R%, S%) - FN M%(M%(R%, S%) / 2) * 2
  181.     S% = S% + 1
  182.     M%(R%, S%) = M%(R%, S%) - FN M%(M%(R%, S%) / 8) * 8
  183.     GOTO Lab1100
  184. Lab990:
  185.     IF D% = -1 THEN Lab1030
  186.     IF R% <> H% THEN Lab1070
  187.     IF S% <> V% THEN Lab1060
  188.     R% = 2
  189.     S% = 2
  190.     GOTO Lab1080
  191. Lab1030:
  192.     IF R% <> 2 THEN Lab1070
  193.     IF S% <> V% THEN Lab1060
  194.     R% = H%
  195.     S% = 2
  196.     GOTO Lab1080
  197. Lab1060:
  198.     S% = S% + 1
  199.     D% = -D%
  200.     GOTO Lab1080
  201. Lab1070:
  202.     R% = R% + D%
  203. Lab1080:
  204.     IF M%(R%, S%) = 15 THEN Lab990
  205.     GOTO Lab710
  206. Lab1100:
  207.   NEXT Iw%
  208.   Mh% = H%
  209.   Mv% = V%
  210.   I% = INT(RND(TIMER) * (Mh% - 1)) + 2
  211.   M%(I%, 1) = 0
  212.   M%(I%, 2) = M%(I%, 2) - FN M%(M%(I%, 2) / 8) * 8
  213.   H% = INT(RND(TIMER) * (Mh% - 1)) + 2
  214.   H1% = H%
  215.   V1% = V%
  216.   COLOR 23
  217.   LOCATE 23, 12
  218.   PRINT "MAZE COMPLETED."
  219.   COLOR 9
  220.   GOTO Lab1390
  221. Lab1190:
  222.   Hz% = INT(Mx% / Mh%)
  223.   Vz% = INT(My% / Mv%)
  224.   Ch% = Ch% + 1
  225.   SCREEN 1
  226.   COLOR 0, 1
  227.   CLS
  228.   PSET (1 + Hz%, 1 + Vz%), 2
  229.   LINE (1 + Hz%, 1 + Vz%) - (1 + Hz%, Mv% * Vz% + 1), 2
  230.   FOR J% = 1 TO Mv%
  231.     FOR I% = 2 TO Mh%
  232.       N% = M%(I%, J%)
  233.       X% = I% * Hz% + 1
  234.       Y% = J% * Vz% + 1
  235.       IF FN M%(N% / 2) = 0 THEN Lab1290
  236.       PSET (X%, Y%), 2
  237.       LINE (X%, Y%) - (X% - Hz%, Y%), 2
  238. Lab1290:
  239.       IF FN M%(N% / 4) = 0 THEN Lab1320
  240.       PSET (X%, Y%), 2
  241.       LINE (X%, Y%) - (X%, Y% - Vz%), 2
  242. Lab1320:
  243.   NEXT I%, J%
  244.   X% = H% * Hz% - 1
  245.   Y% = V% * Vz% - 1
  246.   PSET (X% + 1, Y% + 1), 2
  247.   LINE (X% + 1, Y% + 1) - (X% - Hz% + 2, Y% - Vz% + 2), 2
  248.   PSET (X% - Hz% + 2, Y% + 1), 2
  249.   LINE (X% - Hz% + 2, Y% + 1) - (X% + 1, Y% - Vz% + 2), 2
  250.   RETURN
  251. Lab1390:
  252.   FOR X% = 1 TO Mh%
  253.     FOR Y% = 1 TO Mv%
  254.       M%(X%, Y%) = M%(X%, Y%) + M%(X%, Y%) * 16
  255.   NEXT Y%, X%
  256.   F% = INT(RND(TIMER) * 4) + 1
  257.   ON F% GOTO Lab1440, Lab1450, Lab1460, Lab1470
  258. Lab1440:
  259.   R% = 0
  260.   S% = -1
  261.   GOTO Lab1480
  262. Lab1450:
  263.   R% = 1
  264.   S% = 0
  265.   GOTO Lab1480
  266. Lab1460:
  267.   R% = 0
  268.   S% = 1
  269.   GOTO Lab1480
  270. Lab1470:
  271.   R% = -1
  272.   S% = 0
  273. Lab1480:
  274.   GOSUB Lab70
  275. Lab1490:
  276.   DEF SEG
  277.   POKE 106, 0
  278. Lab1500:
  279.   Ik$ = INKEY$
  280. 'KEY(12) ON
  281. 'KEY(13) ON
  282.   IF Ik$ = CHR$(0) + CHR$(75) THEN GOSUB Lab1580
  283.   IF Ik$ = CHR$(0) + CHR$(77) THEN GOSUB Lab1600
  284.   IF Ik$ = " " THEN Lab1660
  285.   IF Ik$ = CHR$(27) THEN Lab1770
  286.   GOTO Lab1500
  287. Lab1580:
  288.   F% = F% - 1
  289.   IF F% < 1 THEN F% = 4
  290.   GOTO Lab1610
  291. Lab1600:
  292.   F% = F% + 1
  293.   IF F% > 4 THEN F% = 1
  294. Lab1610:
  295.   ON F% GOTO Lab1620, Lab1630, Lab1640, Lab1650
  296. Lab1620:
  297.   R% = 0
  298.   S% = -1
  299.   GOTO Lab1750
  300. Lab1630:
  301.   R% = 1
  302.   S% = 0
  303.   GOTO Lab1750
  304. Lab1640:
  305.   R% = 0
  306.   S% = 1
  307.   GOTO Lab1750
  308. Lab1650:
  309.   R% = -1
  310.   S% = 0
  311.   GOTO Lab1750
  312. Lab1660:
  313.   Z% = M%(H%, V%)
  314.   T% = Z% * 2 ^ (F% - 1)
  315.   T% = FN M%(T% / 128)
  316.   IF T% = 0 THEN Lab1700
  317.   GOTO Lab1490
  318. Lab1700:
  319.   Nm% = Nm% + 1
  320.   LOCATE 22, 24
  321.   PRINT "MOVE "; Nm%
  322.   FOR Q% = 1 TO 500
  323.   NEXT
  324.   IF Nm% < 400 THEN W%(Nm%) = F%
  325.   H% = H% + R%
  326.   V% = V% + S%
  327.   IF V% < 2 THEN Lab1790
  328. Lab1750:
  329.   GOSUB Lab70
  330.   GOTO Lab1490
  331. Lab1770:
  332.   GOSUB Lab1190
  333.   GOTO Lab1490
  334. Lab1790:
  335.   CLS
  336.   LOCATE 12, 5
  337.   PRINT "CONGRATS, IT TOOK YOU "; Nm%; " STEPS."
  338.   IF Ch% = 1 THEN
  339.     LOCATE 14, 8
  340.     PRINT "(BUT YOU CHEATED ONCE.)"
  341.   END IF
  342.   IF Ch% > 1 THEN
  343.     LOCATE 14, 6
  344.     PRINT " (BUT YOU CHEATED "; Ch%; " TIMES.)"
  345.   END IF
  346.   FOR I% = 1 TO 5000
  347.   NEXT
  348.   V% = V1%
  349.   H% = H1%
  350.   GOSUB Lab1190
  351.   X% = INT(H% * Hz% - Hz% / 2) + 1
  352.   Y% = INT(V% * Vz% - Vz% / 2) + 1
  353.   PSET (X%, Y%), 1
  354.   FOR N% = 1 TO Nm%
  355.     IF N% > 400 THEN Lab1950
  356.     F% = W%(N%)
  357.     IF F% = 1 THEN V% = V% - 1
  358.     IF F% = 2 THEN H% = H% + 1
  359.     IF F% = 3 THEN V% = V% + 1
  360.     IF F% = 4 THEN H% = H% - 1
  361.     LINE (X%, Y%) - (INT(H% * Hz% - Hz% / 2) + 1, INT(V% * Vz% - Vz% / 2) + 1), 1
  362.     X% = INT(H% * Hz% - Hz% / 2) + 1
  363.     Y% = INT(V% * Vz% - Vz% / 2) + 1
  364. Lab1950:
  365.   NEXT N%
  366.   LOCATE 1, 1
  367.   PRINT "PRESS ANY KEY TO CONTINUE"
  368. Lab1970:
  369.   Ik$ = INKEY$
  370.   IF Ik$ = "" THEN Lab1970
  371.   CLEAR
  372.   GOTO Lab40
  373.